home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 3 / Amiga Tools 3.iso / programming / colpectius1 / maze_generator.amos / maze_generator.amosSourceCode
AMOS Source Code  |  1993-08-18  |  2KB  |  63 lines

  1. ' Maze Generator 
  2. ' ~~~~~~~~~~~~~~ 
  3. ' by Ben Wyatt, bwyatt@paston.co.uk
  4.  
  5. ' Creates a pretty crap maze, with always at least one way of getting
  6. ' from one point to another, usually two or more.
  7. ' Turbo/AMCAF users can replace the Point/Draw commands
  8.  
  9. Put Key "3" : Input "Scale (1-6) :";S
  10. If S<1 Then S=1
  11. If S>6 Then S=6
  12. S=2^S
  13. SC=1 : XS=S*SC : YS=S*SC
  14. Global SC,XS,YS,XP,YP,XN
  15.  
  16. Dim DX(3),DY(3)
  17. Global DX(),DY()
  18. For N=0 To 3
  19.    Read DX(N),DY(N)
  20. Next N
  21. Data -1,0,1,0,0,-1,0,1
  22.  
  23. Screen Open 0,320,256,2,Lowres
  24. Screen Display 0,128,37,320,256
  25. Flash Off : Curs Off : Cls 0
  26. Palette $0,$FFF
  27.  
  28. _MAZE[0,0]
  29.  
  30. Direct 
  31.  
  32. Procedure _MAZE[X,Y]
  33.    XN=0
  34.    Box 0,0 To(320-XS)*SC,(256-YS)*SC
  35.    Repeat 
  36.       Repeat 
  37.          CN=0
  38.          Repeat 
  39.             D=Rnd(3) : Inc CN
  40.          Until Point((X+DX(D))*XS,(Y+DY(D))*YS)=0 or CN=10
  41.          If CN<10
  42.             Draw X*XS,Y*YS To(X+DX(D))*XS,(Y+DY(D))*YS
  43.             Add X,DX(D) : Add Y,DY(D)
  44.          End If 
  45.       Until Rnd(250)=1 or CN=10
  46.       _CHECK : X=XP : Y=YP
  47.    Until Param
  48. End Proc
  49. Procedure _CHECK
  50.    DN=True
  51.    For X=XN To 319*SC Step XS
  52.       For Y=0 To 255*SC Step YS
  53.          If Point(X-XS,Y)=0 or Point(X+XS,Y)=0 or Point(X,Y-YS)=0 or Point(X,Y+YS)=0
  54.             XN=X : CN=0
  55.             Repeat 
  56.                XP=Rnd(320/XS) : YP=Rnd(256/YS) : Inc CN
  57.             Until Point(XP-XS,YP)=0 or Point(XP+XS,YP)=0 or Point(XP,YP-YS)=0 or Point(XP,YP+YS)=0 or CN=2
  58.             If CN=2 : XP=X/XS : YP=Y/YS : End If 
  59.             DN=False : X=319*SC : Y=255*SC
  60.          End If 
  61.       Next Y
  62.    Next X
  63. End Proc[DN]